package message;

import java.util.ArrayList;

import message.MessageInterface.QUERY_TYPE;

public class UniversalMessage {
	public MSG_TYPE msgType;
	
	public DataMessage dataMsg;
	public QueryMessage queryMsg;
	public ResultMessage resultMsg;
	public int numChunks;
	
	public int getNumChunks() {
		return numChunks;
	}
	public void setNumChunks(int numChunks) {
		this.numChunks = numChunks;
	}
	public ArrayList<Tuple> getResult() {
//		if (getMsgType() == MSG_TYPE.RESULT)
			return resultMsg.getResult();
	}
	public ResultMessage getResultMsg() {
		return resultMsg;
	}
	public void setResultMsg(ResultMessage resultMsg) {
		this.resultMsg = resultMsg;
	}
	public void setPeerList(ArrayList<String> pList) {
		queryMsg.setPeerList(pList);
	}
	public void setQueryType(QUERY_TYPE type) {
		switch (msgType) {
		case QUERY:
			queryMsg.setQueryType(type);
			break;
		case DATA:
			dataMsg.setQueryType(type);
			break;
		case RESULT:
			break;
		}
	}
	
	public QUERY_TYPE getQueryType() {
		switch (msgType) {
		case QUERY:
			return queryMsg.getQueryType();
		case DATA:
			return dataMsg.getQueryType();
//		case RESULT:
//			break;
		default: return QUERY_TYPE.DEFAULT;
		}
	}
	public String getQuery() {
		switch (msgType) {
		case QUERY:
			return queryMsg.getQuery();
		case DATA:
			return dataMsg.getQuery();
//		case RESULT:
//			break;
		default: return ""; 
		}
	}
	public void setQuery(String query) {
		switch (msgType) {
		case QUERY:
			queryMsg.setQuery(query);
			break;
		case DATA:
			dataMsg.setQuery(query);
			break;
		case RESULT:
			break;
		}
	}
	
	public MSG_TYPE getMsgType() {
		return msgType;
	}
	public void setMsgType(MSG_TYPE msgType) {
		this.msgType = msgType;
	}
	public DataMessage getDataMsg() {
		return dataMsg;
	}
	public void setDataMsg(DataMessage dataMsg) {
		this.dataMsg = dataMsg;
	}
	public QueryMessage getQueryMsg() {
		return queryMsg;
	}
	public void setQueryMsg(QueryMessage queryMsg) {
		this.queryMsg = queryMsg;
	}
	/*helper function over here*/
	public enum MSG_TYPE {QUERY, DATA, RESULT}
	
	public UniversalMessage(DataMessage dataMsg, QueryMessage queryMsg) {
		super();
		this.dataMsg = dataMsg;
		this.queryMsg = queryMsg;
	}
	public UniversalMessage() {
		super();
		this.dataMsg = new DataMessage();
		this.queryMsg = new QueryMessage();
	}
}

